Technote 1108

Unknown Sound Features


ñ⁄éü

ÇŸÇΔÇÒÇ«ímÇÁÇÍǃǢǻǩǡÇΩ Sound Manager ÇÃã@î\

É}ÉãÉ`ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉã

É}ÉãÉ`ÉTÉEÉìÉhì¸óÕÉ`ÉÉÉlÉã

É{ÉäÉÖÅ[ÉÄÇΔÉpÉjÉìÉO

ÉTÉEÉìÉhÉ`ÉÉÉlÉãÇÃÉÇÉjÉ^

óvñÒ
ÅuSound Manager Ç…ÇÕñ{ìñDžǟǵǢÇΔévǧã@î\ǙǻǢÅvÅ@DZÇÍÇ‹Ç≈ëΩÇ≠ÇÃÉfÉxÉçÉbÉpǙDZÇÃÇÊǧǻïsñûÇLJÇÁǵǃǴNjǵÇΩÅBǵǩǵÅAåáÇØÇƒÇ¢ÇÈÇΔêMÇ∂ÇÁÇÍǃǢÇΩã@î\ÇÃëΩÇ≠Ç™é¿ÇÕÇ∑Ç≈Ç…ópà”Ç≥ÇÍǃǢNjǵÇΩÅBÇΩÇæÅAÇ´ÇøÇÒÇΔÉ}ÉjÉÖÉAÉãâªÇ≥ÇÍǃǢǻǩǡÇΩÇæÇØÇ≈Ç∑ÅBDZÇà TECHNOTE Ç≈ÇÕÅASound Manager ÇÃDZÇÍÇ‹Ç≈džNjÇËímÇÁÇÍǃǢǻǩǡÇΩã@î\DžǬǢǃè⁄ǵÇ≠ê‡ñæÇµÇ‹Ç∑ÅB

DZÇà TECHNOTE ÇÕ Sound Manager DžǩǩÇÌÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇ®ÇÊÇ—ÉnÅ[ÉhÉEÉFÉAÉfÉxÉçÉbÉpÇëŒè€ÇΔǵǃǮÇËÅAì«é“Ç™ Sound Manager ÇΔ Sound Manager ÇóòópǵÇΩêªïiÇ…è\ï™Ç…èKènǵǃǢÇÈDZÇΔÇëOíÒDžǵǃǢNjÇ∑ÅB


ÇŸÇΔÇÒÇ«ímÇÁÇÍǃǢǻǩǡÇΩ Sound Manager ÇÃã@î\

DZÇà TECHNOTE Ç≈ÇÕÅAéüÇà Sound Manager ÇÃã@î\DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB

É}ÉãÉ`ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉã
ÉXÉeÉåÉIÉTÉEÉìÉhÇ 1 Ç¬ÇæÇØÇ≈Ç»Ç≠ï°êîèoóÕÇ∑ÇÈï˚ñ@ÅBDZDZÇ≈ê‡ñæÇ∑ÇÈÉeÉNÉjÉbÉNÇégǶnjÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕ Macintosh Ç™éùǡǃǢÇÈÉ`ÉÉÉlÉãÇΔìØêîÇÃÉ`ÉÉÉlÉãÇ≈ìØéûÇ…ÉTÉEÉìÉhÇèoóÕÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅB

É}ÉãÉ`ÉTÉEÉìÉhì¸óÕÉ`ÉÉÉlÉã
ÉXÉeÉåÉIÉTÉEÉìÉhÇ 1 Ç¬ÇæÇØÇ≈Ç»Ç≠ï°êîò^âπÇ∑ÇÈï˚ñ@ÅBDZDZÇ≈ê‡ñæÇ∑ÇÈÉeÉNÉjÉbÉNÇégǶnjÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕ Macintosh Ç™éùǡǃǢÇÈì¸óÕÉ\Å[ÉXÇΔìØêîÇÃì¸óÕÉ\Å[ÉXåoóRÇ≈ìØéûÇ…ÉTÉEÉìÉhÇò^âπÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅB

É{ÉäÉÖÅ[ÉÄÇΔÉpÉjÉìÉO
å¯â ìIÇ»ÉIÅ[ÉfÉBÉIÉGÉtÉFÉNÉgÇê∂Ç›èoÇ∑ï˚ñ@ÅB

ÉTÉEÉìÉhÉ`ÉÉÉlÉãÇÃÉÇÉjÉ^
ÉTÉEÉìÉhÉRÉìÉ|Å[ÉlÉìÉgÇégǡǃÅAì¡íËÇÃÉTÉEÉìÉhÉ`ÉÉÉlÉãÇÃÉTÉEÉìÉhèoóÕÉåÉxÉãÇÉÇÉjÉ^Ç∑ÇÈï˚ñ@ÅB

É}ÉãÉ`ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉã

DZÇÃã@î\ÇÕÅASystem 7.0 ÇΔÇΔLJDžèoâ◊Ç≥ÇÍÇΩ Sound Manager 3.0 Ç©ÇÁÉTÉ|Å[ÉgÇ≥ÇÍǃǢNjǵÇΩÅBé¿ç€ÅAÅwInside Macintosh: SoundÅxÇà 2-128 ÉyÅ[ÉWÇ…ÇÕDZÇÃã@î\ÇÃê‡ñæÇ™Ç†ÇËÇ‹Ç∑ÅBǵǩǵÅADZÇÃã@î\ÇÃégÇ¢ï˚DžǬǢǃÇÕê‡ñæÇ≥ÇÍǃǢNjÇπÇÒÅB

SndNewChannel ÇåƒÇ—èoÇ∑ÇΔÇ´ÅAìnÇ≥ÇÍÇÈÉpÉâÉÅÅ[É^Çà 1 ǬÇÕ long Ç≈džÇËÅADZÇÍÇ™É`ÉÉÉlÉãÇÃèâä˙âªÉpÉâÉÅÅ[É^ÇéwíËǵNjÇ∑ÅBí èÌÅAÉfÉxÉçÉbÉpÇÕDZÇÃÉpÉâÉÅÅ[É^Ç… nilÅAinitMonoÅAÇ‹ÇΩÇÕ initStereo ÇìnÇ∑ÇæÇØÇ≈Ç∑Ç™ÅAé¿ÇÕ kUseOptionalOutputDevice (DZÇÍÇÕ -1 ÇΔíËã`Ç≥ÇÍǃǢNjÇ∑) ÇìnÇ∑DZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB

kUseOptionalOutputDevice ÇégópÇ∑ÇÈÇΔÅAÉTÉEÉìÉhÇçƒê∂Ç∑ÇÈÇΩÇflÇÃàŸÇ»ÇÈèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇéwíËÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBǬNjÇËÅAkUseOptionalOutputDevice Ç…ÇÊÇËÅAÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈèoóÕÉfÉoÉCÉXÇΔìØêîÇÃèoóÕÉfÉoÉCÉXÇ≈ìØéûÇ…ÉTÉEÉìÉhÇçƒê∂Ç≈Ç´ÇÈÇÊǧDžǻÇÈÇΔǢǧDZÇΔÇ≈Ç∑ÅBÇΩÇΔǶnjÅA6 É`ÉÉÉlÉãÉJÅ[ÉhÇéùǡǃǢÇÈÉnÅ[ÉhÉEÉFÉAÉfÉxÉçÉbÉpÇ≈džÇÍÇŒÅA3 ǬÇÃÉXÉeÉåÉIèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇçÏê¨Ç≈Ç´ÇÈDZÇΔÇ…Ç»ÇË (6 ǬÇÃèoóÕÉ`ÉÉÉlÉãÇ 2 Ǭ 1 ëgDžǵǃ)ÅAkUseOptionalOutputDevice ÉZÉåÉNÉ^ÇégǡǃDZÇÃÉJÅ[ÉhÇ…ëŒâûǵÇΩÉ\ÉtÉgÉEÉFÉAÇèëÇ´ÅA3 ǬÇÃÉXÉeÉåÉIÉTÉEÉìÉhÇìØéûÇ…çƒê∂Ç≈Ç´ÇÈÇÊǧDžǻÇÈÇÕÇ∏Ç≈Ç∑ÅB

kUseOptionalOutputDevice ÉZÉåÉNÉ^ÇÕéüÇÃÇÊǧDžìÆçÏǵNjÇ∑ÅBÇ‹Ç∏ÅAégópǵÇΩÇ¢èoóÕÉRÉìÉ|Å[ÉlÉìÉgÇÃÉRÉìÉ|Å[ÉlÉìÉgÉCÉìÉXÉ^ÉìÉXÇåüèoÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ (éüÇÃó·Ç≈ÇÕÅAAIFF Writer ÉTÉìÉvÉãèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇåüèoǵNjÇ∑)ÅB
     // èoóÕÉRÉìÉ|Å[ÉlÉìÉgÇÃÉCÉìÉXÉ^ÉìÉXÇåüèoÇ∑ÇÈ
     outputDev.componentType = 'sdev';
     outputDev.componentSubType = 'AIFW';
     outputDev.componentManufacturer = 'appl';
     outputDev.componentFlags = 0;
     outputDev.componentFlagsMask = 0;

     theAIFWComponent = FindNextComponent (0, &outputDev);


Ç∑Ç◊ǃÇÃÉTÉEÉìÉhèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇåüèoÇ∑ÇÈÉWÉFÉlÉäÉbÉNÇ»ÉãÅ[É`ÉìÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB
 long FindAllsdevs (Component ** componentsArray) {
     Component                   foundComponent,
                                 aComponent;
     ComponentDescription        looking;
     long                        numComponents,
                                 i;

     aComponent                      = 0;
     looking.componentType           = kSoundOutputDeviceType; // 'sdev'
     looking.componentSubType        = 0;
     looking.componentManufacturer   = 0;
     looking.componentFlags          = 0;
     looking.componentFlagsMask      = 0;

     numComponents = CountComponents (&looking);

     *componentsArray = (Component*)NewPtr (sizeof (Component) * numComponents);
     if (componentsArray == nil) {
         numComponents = 0;      // ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉãÇÃÉäÉXÉgÇçÏê¨Ç≈Ç´Ç»Ç≠Ç»ÇÈ
     }

     for (i = 0; i < numComponents; i++) {
         foundComponent = FindNextComponent (aComponent, &looking);
         (*componentsArray)[i] = foundComponent;
         aComponent = foundComponent;    // åüèoÇåpë±Ç∑ÇÈ
     }

     return numComponents;
 }


DZÇÃÉãÅ[É`ÉìÇégópÇ∑ÇÈÇΔÅAÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉãÇÃÉäÉXÉgÇÉÜÅ[ÉUÇ…íÒé¶Ç≈Ç´ÅAÉTÉEÉìÉhÇÃÉ`ÉÉÉlÉãêîÇÉ~ÉLÉVÉìÉOÇ…ÇÊǡǃ 2 É`ÉÉÉlÉãÇ…å∏ÇÁÇ∑DZÇΔÇ»Ç≠ÅAÉÜÅ[ÉUÇÕÉ}ÉãÉ`É`ÉÉÉlÉã (2 É`ÉÉÉlÉãÇí¥Ç¶ÇÈ) ÉTÉEÉìÉhÇèoóÕÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅB

DZDZÇ≈écÇ≥ÇÍǃǢÇÈèàóùÇΔǢǶnjÅAëIëÇ≥ÇÍÇΩèoóÕÉfÉoÉCÉXÇégópÇ∑ÇÈêVǵǢÉTÉEÉìÉhÉ`ÉÉÉlÉãÇçÏê¨Ç∑ÇÈDZÇΔÇæÇØÇ≈Ç∑ÅB
 err = SndNewChannel (&theOptionalOutputChan, kUseOptionalOutputDevice, 
                        (long)theAIFWComponent, nil);


DZÇÍÇÕNjǡÇΩÇ≠ä»íPÇ»òbÇ≈Ç∑ÅBtheOptionalOutputChan åoóRÇ≈ÉTÉEÉìÉhÇçƒê∂Ç∑ÇÈÇΩÇ—Ç…ÅAǪÇÃÉTÉEÉìÉhÇÕëgÇ›çûÇ›ÉnÅ[ÉhÉEÉFÉAÇ÷ÇÕëóÇÁÇÍÇ∏ÅAAIFF Writer èoóÕÉfÉoÉCÉX (DZÇÍÇ™É}ÉãÉ`É`ÉÉÉlÉãèoóÕÉJÅ[ÉhÇÃëÊ 3 Ç®ÇÊÇ—ëÊ 4 ÇÃÉ`ÉÉÉlÉãÇ≈džÇÈDZÇΔÇÕóeà’Ç…ÇÌÇ©ÇÈÇÕÇ∏Ç≈Ç∑) Ç…ëóÇÁÇÍÇ‹Ç∑ÅB

ǪÇÍÇ≈ÇÕÅAtheOptionalOutputChan ÉZÉåÉNÉ^ÇÃégópÇâ¬î\Ç…Ç∑ÇÈÇΩÇflÇ…ÅAÉ}ÉãÉ`É`ÉÉÉlÉãÉnÅ[ÉhÉEÉFÉAÇÃÉfÉxÉçÉbÉpÇ™çsǧÇ◊ǴDZÇΔÇΔÇÕǢǡÇΩÇ¢âΩÇ≈ǵÇÂǧÅB

ǪÇÍÇŸÇ«ëΩÇ≠ÇÃDZÇΔÇçsǧïKóvÇÕdžÇËÇ‹ÇπÇÒÅBÉfÉxÉçÉbÉpÇ™Ç∑Ç◊ǴDZÇΔÇÕÅAÉnÅ[ÉhÉEÉFÉAÇ™ÉTÉ|Å[ÉgÇ∑ÇÈèoóÕÉ`ÉÉÉlÉãÇÃäeÉyÉAÇ…ëŒÇµÇƒèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇçÏê¨Ç∑ÇÈDZÇΔÇæÇØÇ≈Ç∑ÅBÉnÅ[ÉhÉEÉFÉAÇ… 2 ǬÇÃÉ`ÉÉÉlÉãǵǩǻǢèÍçáÅAïKóvÇΔÇ»ÇÈÇÃÇÕ 1 ǬÇÃèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇæÇØÇ≈Ç∑ÅBÇ‹ÇΩÅAÉnÅ[ÉhÉEÉFÉAÇ… 20 å¬ÇÃèoóÕÉ`ÉÉÉlÉãǙdžÇÈèÍçáÇÕÅA10 å¬ÇÃèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇ™ïKóvÇ…Ç»ÇËÇ‹Ç∑ÅB

DZDZÇ≈ÅAÅuǶǡÅA10 å¬ÇÃèoóÕÉRÉìÉ|Å[ÉlÉìÉgÅBÇøÇÂÇ¡ÇΔǮǩǵǢÇÃÇ≈ÇÕÅBÅvÇΔǢǧÉfÉxÉçÉbÉpÇÃåæótÇ™ï∑DZǶǃÇ≠ÇÈÇÊǧÇ≈Ç∑ÅB

Ç≈LJâΩLJǮǩǵǻÇΔDZÇÎÇÕdžÇËÇ‹ÇπÇÒÅBÉRÉìÉ|Å[ÉlÉìÉgÇÕLJÇΔLJÇΔçƒóòópâ¬î\Ç≈džÇÈÇΩÇflÅAé¿ç€Ç…ïKóvÇ»ÇÃÇÕÅAdžÇΩǩLJ 10 å¬ÇÃàŸÇ»ÇÈèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇ™ë∂ç›Ç∑ÇÈÇ©ÇÃÇÊǧDžÅAìØÇ∂èoóÕÉRÉìÉ|Å[ÉlÉìÉgÇ 10 âÒìoò^Ç∑ÇÈ 10 å¬Çà 'thng' ÉäÉ\Å[ÉXÇ»ÇÃÇ≈Ç∑ÅB

èoóÕÉRÉìÉ|Å[ÉlÉìÉgÇÕÅAèoóÕêÊÇΔÇ»ÇÈåªé¿ÇÃÉnÅ[ÉhÉEÉFÉAÉ`ÉÉÉlÉãÇ™íäè€âªÇ≥ÇÍÇÈÇÊǧDžèëǢǃÇ≠ÇæÇ≥Ç¢ÅBǬNjÇËÅA1 ǬÇÃÉRÅ[ÉhÉxÅ[ÉXÇ≈égópâ¬î\Ç»Ç∑Ç◊ǃÇÃÉ`ÉÉÉlÉãÇ…ëŒâûÇ∑ÇÈÇÊǧǻï˚ñ@Ç≈Ç∑ÅBǪǧÇ∑ÇÍÇŒÅAèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇ™ìoò^ÇçsǧÇΔÇ´Ç…ÅAêßå‰ÇÃëŒè€ÇΔÇ»ÇÈèoóÕÉ`ÉÉÉlÉãÇåàíËǵÅADZÇÃèÓïÒÇǪÇÃÉOÉçÅ[ÉoÉãÇ…äiî[ǵǃǢÇÈÇÊǧDžå©Ç¶Ç‹Ç∑ÅBÇ≥ÇÁÇ…ïKóvÇΔÇ»ÇÈí«â¡ÇÃÉRÅ[ÉhÇÕÇ≤Ç≠ÇÌÇ∏Ç©Ç≈Ç∑ÅBÇ«ÇÃÉ`ÉÉÉlÉãÇ…èoóÕÇ™çsÇÌÇÍǃǢÇÈÇ©Çí«ê’Ç∑ÇÈÉRÅ[ÉhǙdžÇÍÇŒè\ï™Ç≈Ç∑ÅB

íçà”:
ÉIÉvÉVÉáÉìÇÃèoóÕÉ`ÉÉÉlÉãåoóRÇ≈ÉTÉEÉìÉhÇèoÇ∑ÇΩÇflÇ… Speech Manager ÇégópÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBí èÌǫǮÇË NewSpeechChannel ÇåƒÇ—èoǵÅAÇ≥ÇÁÇ… soSoundOutput ÉZÉåÉNÉ^ÇΔèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇÃÉRÉìÉ|Å[ÉlÉìÉgÉCÉìÉXÉ^ÉìÉXÇégǡǃ SetSpeechInfo ÇåƒÇ—èoǵNjÇ∑ÅB
 err = SetSpeechInfo (theAIFWSpeechChan, soSoundOutput, &theAIFWComponent);

É}ÉãÉ`ÉTÉEÉìÉhì¸óÕÉ`ÉÉÉlÉã

DZÇÃã@î\ÇÕÉ}ÉãÉ`ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉãÇΔÇŸÇ⁄ìØólÇ…ìÆçÏǵNjÇ∑ÅBÉTÉEÉìÉhì¸óÕÇ≈àŸÇ»ÇÈÇÃÇÕÅAÉRÉìÉ|Å[ÉlÉìÉgÇ≈ÇÕÇ»Ç≠ÉhÉâÉCÉoÇ™ïKóvÇ»ì_ÇæÇØÇ≈Ç∑ÅB

ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ÇÕégópâ¬î\Ç»ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇïKóvÇ»êîÇæÇØÉIÅ[ÉvÉìÇ≈Ç´ÇÈÇΩÇflÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™çsǧÇ◊ǴDZÇΔÇÕÅAǪÇÍǺÇÍÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃñºëOÇégǡǃSPBOpenDevice ÇâΩìxLJåƒÇ—èoÇ∑DZÇΔÇæÇØÇ≈Ç∑ÅB

Sound Manager Ç…ÇÕÅAégópâ¬î\Ç»Ç∑Ç◊ǃÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇä»íPÇ…óÒãìÇ∑ÇÈÇΩÇflÇÃåƒÇ—èoǵǙópà”Ç≥ÇÍǃǢNjÇ∑ÅB
 SPBGetIndexedDevice (index, drvrName, &drvrIcon);


1 Ç©ÇÁénÇ‹ÇÈÉCÉìÉfÉbÉNÉXÇìnǵÅAÉGÉâÅ[Ç™ï‘Ç≥ÇÍÇÈÇ‹Ç≈ǪÇÍÇ 1 ǬÇ∏ǬÉCÉìÉNÉäÉÅÉìÉgǵǃǢÇ≠ÇæÇØÇ≈ÅAêvë¨Ç©Ç¬óeà’Ç…égópâ¬î\Ç»Ç∑Ç◊ǃÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇä‹ÇfiÉäÉXÉgÇç\ízÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB


QuickTime Ç…ÇÊÇÈï˚ñ@
Ç‹ÇΩÅAíPèÉÇ… QuickTime ÇégópǵÅAì¸óÕÉ\Å[ÉXÇÃê›íËÇΔò^âπÇçsǧ Sequence Grabber Çégǡǃò^âπÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB

éüÇÃÉRÅ[ÉhÇ≈ÇÕÅAQuickTime Çà Sequence Grabber ÉTÉEÉìÉhì¸óÕÉpÉlÉãÇóòópÇ∑ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB
  ComponentResult     err;
  SGChannel           sgSoundChanRef;
  SeqGrabComponent    sgComponent;

     sgComponent = OpenDefaultComponent (SeqGrabComponentType, 0);

     err = SGInitialize (sgComponent);

     if (err == noErr) {
         err = SGNewChannel (sgComponent, SoundMediaType, &sgSoundChanRef);
     }

     if (err == noErr) {
         err = SGSettingsDialog (sgComponent, sgSoundChanRef, 0, nil, 0L, nil, nil);
     }

     return err;
 }

Sound Device
QuickTime Çégǡǃò^âπÇ∑ÇÈóòì_Çà 1 ǬÇÕÅAQuickTime Ç™é©ìÆìIÇ…ÉåÅ[ÉgÇê›íËÇ∑ÇÈÅAǬNjÇËÉTÉEÉìÉhÇïœä∑Ç∑ÇÈÇΔǢǧì_Ç≈Ç∑ÅBǪÇÃåãâ ÅAì¡íËÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ™íÒãüÇ∑ÇÈÉTÉìÉvÉäÉìÉOÉåÅ[ÉgÇ…ÇÊÇÈò^âπÇ…å¿íËÇ≥ÇÍÇÈDZÇΔÇ»Ç≠ÅAîCà”ÇÃÉTÉìÉvÉäÉìÉOÉåÅ[ÉgÇ≈å¯â ìIÇ…ò^âπÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

ÉnÅ[ÉhÉEÉFÉAÉxÉìÉ_Ç™É}ÉãÉ`ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇçÏê¨ÇµÇÊǧÇΔÇ∑ÇÈÇΔÅAÉfÉxÉçÉbÉpÇÊÇËÇÌÇ∏ǩDžëΩÇ≠ÇÃçÏãΔÇ™ïKóvÇ…Ç»ÇËÇ‹Ç∑ÅBǬNjÇËÅAÉhÉâÉCÉoÇ䯇¯Ç…ï°êªÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÇ™ÅAïKóvÇ»ÇÃÇÕDZÇÍÇæÇØÇ≈Ç∑ÅB

É{ÉäÉÖÅ[ÉÄÇΔÉpÉjÉìÉO

Sound Manager åoóRÇ≈çƒê∂Ç≥ÇÍǃǢÇÈÉTÉEÉìÉhÇÃÉ{ÉäÉÖÅ[ÉÄÇí≤êÆÇ∑ÇÈÇ…ÇÕÅAéüÇÃÉRÅ[ÉhÇÃÇÊǧDžÅASndDoImmediateåƒÇ—èoǵÇ≈î≠çsÇ≥ÇÍÇÈ volumeCmd ÇégópǵNjÇ∑ÅB
     SndCommand      theCmd;
     UInt16      rightVol, leftVol;

     theCmd.cmd = volumeCmd;
     theCmd.param2 = (rightVol << 16) | leftVol;
     err = SndDoImmediate(chan, &theCmd);


ç∂âEÇÃÉ{ÉäÉÖÅ[ÉÄÇÕé¿ç€Ç…ÇÕ 16 ÉrÉbÉgÇÃå≈íËè¨êîì_êîÇ≈Ç∑ÅB32 ÉrÉbÉgÇÃå≈íËè¨êîì_êîÇΔìØólÇ…ÅAè„à  8 ÉrÉbÉgÇÕÉ{ÉäÉÖÅ[ÉÄÇÃêÆêîïîï™Çï\ǵÅAâ∫à  8 ÉrÉbÉgÇÕÉ{ÉäÉÖÅ[ÉÄÇÃè¨êîïîï™Çï\ǵNjÇ∑ÅBÇΩÇΔǶnjÅAÉ{ÉäÉÖÅ[ÉÄÇÃílÇ0x01000100 ÇΔê›íËÇ∑ÇÈÇΔóºï˚ÇÃÉ`ÉÉÉlÉãÇ™ÉtÉãÉ{ÉäÉÖÅ[ÉÄÇ…Ç»ÇËÇ‹Ç∑ÅBàÍï˚ÅA0x01000080ÇΔǢǧílÇê›íËÇ∑ÇÈÇΔÅAâEÉ`ÉÉÉlÉãÇÕÉtÉãÉ{ÉäÉÖÅ[ÉÄÇ…Ç»ÇËÇ‹Ç∑Ç™ÅAç∂É`ÉÉÉlÉãÇÕÇøÇÂǧǫîºï™ÇÃÉ{ÉäÉÖÅ[ÉÄÇ…Ç»ÇËÇ‹Ç∑ÅB

éûä‘ÇÃåoâflÇΔÇΔLJDžÅAç∂ÇÃÉ{ÉäÉÖÅ[ÉÄÇÇæÇÒÇæÇÒëÂÇ´Ç≠ǵÅAâEÇÃÉ{ÉäÉÖÅ[ÉÄÇÇæÇÒÇæÇÒè¨Ç≥Ç≠Ç∑ÇÈÇÊǧǻåƒÇ—èoǵÇçsǧÇΔÅAÉTÉEÉìÉhÇç∂Ç©ÇÁâEÇ…ÉpÉìÇ≥ÇπÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

ÇΔDZÇÎÇ≈ÅAàÍïîÇÃÉfÉxÉçÉbÉpÇ©ÇÁÅu1 ǬÇÃÉ`ÉÉÉlÉãÇ…ëŒÇµÇƒ 0x0100 Çí¥Ç¶ÇÈÉ{ÉäÉÖÅ[ÉÄÇê›íËÇ∑ÇÈÇΔǫǧǻÇËÇ‹Ç∑Ç©ÅvÇΔǢǧéøñ‚ÇéÛÇØÇÈDZÇΔǙdžÇËÇ‹Ç∑ÅBìöǶÇÕä»íPÇ≈Ç∑ÅBÉTÉEÉìÉhÇ™ÇæÇÒÇæÇÒëÂÇ´Ç≠Ç»ÇÈÇæÇØÇ≈Ç∑ÅBvolumeCmd ÇégǡǃÅAÉnÅ[ÉhÉçÉbÉNÇ≥ǻǙÇÁÇÃé®ÇǬÇÒÇ¥Ç≠ÇÊǧǻÉtÉãÉ{ÉäÉÖÅ[ÉÄÇ…ëŒâûǵÇΩÉTÉEÉìÉhÉåÉxÉãÇê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB


QuickTime Ç…ÇÊÇÈï˚ñ@
ÉTÉEÉìÉhÇÃÉ{ÉäÉÖÅ[ÉÄÇΔÉpÉjÉìÉOÇêßå‰Ç∑ÇÈLJǧ 1 ǬÇà (ǵǩLJÇÊÇËÇÊÇ¢) ï˚ñ@ÇΔǵǃÅAì`âΔÇÃïÛìÅÇ≈džÇÈ QuickTime ÇégǧÇΔǢǧéËǙdžÇËÇ‹Ç∑ÅBQuickTime 2.1 ÇÃÉÇÉfÉBÉtÉ@ÉCÉAÉgÉâÉbÉNÇégópÇ∑ÇÈÇΔÅAï°éGÇ»ÉGÉtÉFÉNÉgÇä‹ÇfiÉTÉEÉìÉhÇçƒê∂Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB


Tween Media ÉnÉìÉhÉâ
QuickTime 2.5 Ç≈íÒãüÇ≥ÇÍǃǢÇÈ Tween Media ÉnÉìÉhÉâÇégópÇ∑ÇÈÇΔÅAǪÇÍǺÇÍÇÃÉTÉEÉìÉhÉ`ÉÉÉlÉãDžǬǢǃäJénÉ{ÉäÉÖÅ[ÉÄÇΔèIóπÉ{ÉäÉÖÅ[ÉÄÇæÇØÇéwíËÇ∑ÇÈÇæÇØÇ≈ä»íPÇ…ÉpÉjÉìÉOÇé¿åªÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBTween ÉRÉìÉ|Å[ÉlÉìÉgÇ™íÜä‘ÇÃÉ{ÉäÉÖÅ[ÉÄílÇÇ∑Ç◊ǃé©ìÆìIÇ…ê∂ê¨ÇµÇ‹Ç∑ÅBDZÇÍÇÕÅAQuickTime 2.1 ÇΔÇÕëÂÇ´Ç≠àŸÇ»ÇÈì_Ç≈Ç∑ÅBQuickTime 2.1 ÇÕ Tween Media ÉnÉìÉhÉâÇéùÇΩÇ∏ÅAÉ{ÉäÉÖÅ[ÉÄÇÃÉpÉjÉìÉOÇçsǮǧÇΔÇ∑ÇÈÇΔÅAëΩêîÇÃíÜä‘ÇÃÉ{ÉäÉÖÅ[ÉÄílÇê›íËÇ∑ÇÈïKóvǙdžÇËNjǵÇΩÅBTween Media ÉnÉìÉhÉâÇÕÅAÉfÉxÉçÉbÉpÇ™íPèÉÇ…äJénÉ{ÉäÉÖÅ[ÉÄÇΔèIóπÉ{ÉäÉÖÅ[ÉÄÇéwíËÇ≈Ç´ÇÈÇÊǧDžÇ∑ÇÈDZÇΔÇ≈ÅAèàóùÇíPèÉâªÇµÇ‹Ç∑ÅBTween Media ÉnÉìÉhÉâÇÕÅAÉÄÅ[ÉrÅ[ (ÉTÉEÉìÉh) ÇÃêiçsÇ…î∫Ç¢ÅAÉ{ÉäÉÖÅ[ÉÄÇÃê›íËÇ™ê≥ǵÇ≠çsÇÌÇÍǃǢÇÈǩǫǧǩÇé©ìÆìIÇ…É`ÉFÉbÉNǵNjÇ∑ÅB

Tween Media ÉnÉìÉhÉâÇÃégÇ¢ï˚DžǬǢǃÇÕÅAÅwDeveloper's Guide: QuickTime for Macintosh version 2.5ÅxÇÃëÊ 13 èÕÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉÇÉfÉBÉtÉ@ÉCÉAÉgÉâÉbÉNDžǬǢǃÇÕÅAÅwDeveloper's Guide: QuickTime for Macintosh version 2.5ÅxÇà 1-21 ÉyÅ[ÉWà»ç~ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉTÉEÉìÉhÉ`ÉÉÉlÉãÇÃÉÇÉjÉ^

àÍïîÇÃÉfÉxÉçÉbÉpÇÕÅAÉåÉxÉãÇÃåvë™Ç»Ç«ÅAÇ≥NjǥNjǻñ⁄ìIÇ≈ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉãÇÉÇÉjÉ^ǵÇΩÇ¢ÇΔçlǶǃǢNjÇ∑ÅBDZÇÍÇ‹Ç≈ÅASound Manager ÇÃÉoÉbÉtÉ@Çä»íPÇ…éÊìæÇ∑ÇÈï˚ñ@ǙǻǩǡÇΩÇΩÇflÅADZÇÍÇÕǩǻÇËÇfiÇ∏ǩǵǢèàóùÇ≈ǵÇΩÅBǪÇÃÇΩÇflÅAåªç›çƒê∂Ç≥ÇÍǃǢÇÈÉTÉEÉìÉhÇÃà íuÇêÑë™Ç∑ÇÈǵǩdžÇËÇ‹ÇπÇÒÇ≈ǵÇΩÅB

Sound Manager 3.2.1 Ç≈ÇÕÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈÇÊǧDžǻÇËÅADZÇÃñ‚ëËÇÃâåàÇ™óeà’Ç…Ç»ÇËNjǵÇΩÅBDZÇÍÇÕÅAÉRÉìÉ|Å[ÉlÉìÉgÉ`ÉFÅ[ÉìÇÃíÜÇ≈ Apple Mixer ÉRÉìÉ|Å[ÉlÉìÉgÇÃíºëOÇ…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇÈÉRÉìÉ|Å[ÉlÉìÉgÇ≈Ç∑ÅB

ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÕÅAǪÇÍÇ™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈÉ`ÉÉÉlÉãÇëŒè€Ç…ïœä∑Ç≥ÇÍÇΩÉTÉEÉìÉhÉfÅ[É^ÇÉ`ÉFÉbÉNǵNjÇ∑ÅBǬNjÇËÅAApple Mixer Ç™åªç›çƒê∂íÜÇÃï ÇÃÉTÉEÉìÉhÇΔÉ~ÉLÉVÉìÉOǵÇÊǧÇΔǵǃǢÇÈÅAà≥èkÇ≥ÇÍǃǢǻÇ≠ǃÅAÉåÅ[Égïœä∑ÅAÉ`ÉÉÉlÉãïœä∑ÅAÇ®ÇÊÇ—ÉTÉCÉYïœä∑Ç≥ÇÍÇΩÉfÅ[É^ÇÉ`ÉFÉbÉNǵNjÇ∑ÅB

åªç›ÇÃÇΔDZÇÎÅAÇ∑Ç◊ǃÇÃÉTÉEÉìÉhÉ`ÉÉÉlÉãÇ≈É~ÉLÉVÉìÉOÇ≥ÇÍÇΩåãâ ÇÉ`ÉFÉbÉNÇ∑ÇÈÉ|ÉXÉgÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈï˚ñ@ÇÕdžÇËÇ‹ÇπÇÒÅBǵǩǵÅADZÇÃÇÊǧǻÉRÉìÉ|Å[ÉlÉìÉgÇÕÇ∑Ç≈Ç…ë∂ç›ÇµÇƒÇ®ÇËÅAÉTÉEÉìÉhèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇΔåƒÇŒÇÍǃǢNjÇ∑ÅB

ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇèëÇ≠ï˚ñ@ÇÕÅAëºÇÃÉTÉEÉìÉhÉRÉìÉ|Å[ÉlÉìÉgÇÃèÍçáÇΔNjǡÇΩÇ≠ìØólÇ≈Ç∑ÅBÉTÉEÉìÉhÉRÉìÉ|Å[ÉlÉìÉgÇ™ÉTÉ|Å[ÉgÇ∑ÇÈïKóvÇÃdžÇÈÉZÉåÉNÉ^DžǬǢǃÇÕÅAÅwInside Macintosh: SoundÅxÇÃëÊ 4 èÕÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈÇ…ÇÕÅAêVǵǢ SPBSetDeviceInfo ÉZÉåÉNÉ^Çà siPreMixerSoundComponent ÇégÇ¢ÅAÉCÉìÉXÉgÅ[ÉãǵÇΩÇ¢ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇãLèqÇ∑ÇÈSoundComponentLink Ç…É|ÉCÉìÉ^ÇìnǵNjÇ∑ÅB

éüÇÃÉTÉìÉvÉãä÷êîÇÕÅAíPèÉÇ»ÉTÉEÉìÉhÉ`ÉÉÉlÉãÇçÏê¨ÇµÅAǪÇÃÉTÉEÉìÉhÉ`ÉÉÉlÉãÇ…éwíËǵÇΩÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈï˚ñ@ÇãÔëÃìIÇ…é¶ÇµÇƒÇ¢Ç‹Ç∑ÅB
SndChannelPtr CreateChannelWithPreMixer (SndCallBackUPP callbackRoutine, OSType pmcSubTye)
 {
     SoundComponentLink  preMixerCmp;
     SndChannelPtr       theChannel = nil;
     OSErr               err;

     /* êVǵǢÉTÉEÉìÉhÉ`ÉÉÉlÉãÇçÏê¨Ç∑ÇÈ */
     err = SndNewChannel (&theChannel, sampledSynth, 0, callbackRoutine);

     if (err == noErr) {
         /* ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇíËã`Ç∑ÇÈ */
         preMixerCmp.description.componentType = kSoundEffectsType;
         preMixerCmp.description.componentSubType = pmcSubTye;
         preMixerCmp.description.componentManufacturer = 0;
         preMixerCmp.description.componentFlags = 0;
         preMixerCmp.description.componentFlagsMask = 0;
         preMixerCmp.mixerID = nil;
         preMixerCmp.linkID = nil;
     }

     if (err == noErr) {
         /* ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇ Apple Mixer ÇÃëOÇ…ÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈ */
         err = SndSetInfo (theChannel, siPreMixerSoundComponent, &preMixerCmp);
     }

     if (err != noErr) {
         theChannel = nil;
     }

     return (theChannel);
 }


ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇΔÇÃä‘Ç≈èÓïÒÇÇ‚ÇËéÊÇËÇ∑ÇÈÇ…ÇÕÅASndSetInfo Ç®ÇÊÇ—SndGetInfo ä÷êîÇégǢNjÇ∑ÅBÇΩÇΔǶnjÅAéüÇÃåƒÇ—èoǵÇÕÅAÉåÉxÉãÉÅÅ[É^ÉRÉìÉ|Å[ÉlÉìÉgÇ©ÇÁåªç›ÇÃílÇéÊìæÇµÇ‹Ç∑ÅB
err = SndGetInfo (theChannel, LMValue, &level);


èdóvÇ»êßå¿éñçÄ
ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇ…ÇÕ 1 ǬÇÃèdóvÇ»êßå¿éñçÄǙdžÇËÇ‹Ç∑ÅBǬNjÇËÅAÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÕÉTÉEÉìÉhÇÃí∑Ç≥Çí∑Ç≠Ç≈ǴǻǢÇΔǢǧêßå¿Ç≈Ç∑ÅBÉäÉoÅ[ÉuÇ‹ÇΩÇÕÉtÉFÅ[ÉhÉRÉìÉ|Å[ÉlÉìÉgÇèëǢǃǢÇÈèÍçáÅADZÇÃêßå¿ÇÕîÒèÌÇ…èdóvÇ≈Ç∑ÅBDZÇÍÇÁÇÃÉ^ÉCÉvÇÃÉTÉEÉìÉhÉGÉtÉFÉNÉgÇê≥èÌÇ…ìÆçÏÇ≥ÇπÇÈÇ…ÇÕÅAÉRÉìÉ|Å[ÉlÉìÉgÇ…ÇÊÇÈÉGÉtÉFÉNÉgÇΔÇÃíuÇ´ä∑ǶǙÇ≈Ç´ÇÈÇÊǧDžÅAçƒê∂Ç≥ÇÍÇÈÉTÉEÉìÉhÇ™è\ï™Ç…í∑Ç¢ñ≥âπÇÃÉGÉìÉfÉBÉìÉOÇéùÇ¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÕÉTÉEÉìÉhÇÃí∑Ç≥ÇíZÇ≠Ç∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹Ç∑Ç™ÅAí∑Ç≠Ç∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB

óvñÒ
DZÇà TECHNOTE Ç≈ÇÕÅADZÇÍÇ‹Ç≈džNjÇËímÇÁÇÍǃǢǻǩǡÇΩ Sound Manager ÇÃã@î\DžǬǢǃê‡ñæÇµÇ‹ÇµÇΩÅBDZÇÍÇÁÇÃã@î\Ç™óùâÇ≈Ç´ÇÍÇŒÅAǪÇÍÇÁÇè\ï™Ç…óòópǵǃÅADZÇÍÇ‹Ç≈DžǻǢóDÇÍÇΩÉTÉEÉìÉhÉAÉvÉäÉPÅ[ÉVÉáÉìÇäJî≠Ç≈Ç´ÇÈÇÊǧDžǻÇÈÇÕÇ∏Ç≈Ç∑ÅB

éQçlï∂å£


çXêVì˙: 1997 îN 10 åé 6 ì˙